/*
* Copyright (c) 2016 ShopJsp. All Rights Reserved.
 * ============================================================================
 * 版权所有 2011 - 今 北京华宇盈通科技有限公司，并保留所有权利。
 * ----------------------------------------------------------------------------
 * 提示：在未取得SHOPJSP商业授权之前，您不能将本软件应用于商业用途，否则SHOPJSP将保留追究的权力。
 * ----------------------------------------------------------------------------
 * 官方网站：http://www.shopjsp.com
 * ============================================================================
*/
package com.hyyt.shopjsp.solr.service;


import com.hyyt.shopjsp.product.vo.SearchProductVo;
import org.apache.solr.client.solrj.SolrServerException;

import java.util.List;
import java.util.Map;

/**
 * Solr全文搜索接口
 *
 * @author ankang 2016-08-10 11:39:38
 */
public interface ISolrService {

    /**
     * 商品搜索
     *
     * @param key              搜索关键字
     * @param type             商品分类
     * @param rp               价格区间[0,100]
     * @param sort             排序；属性-desc|属性-asc
     * @param isSelfSupport  是否自营，1自营，2平台商铺商品
     * @param start           起始记录
     * @param rows            记录数
     * @return                 商品集合
     */
    List<SearchProductVo> query(String key, Integer type, String rp, String sort,Integer isSelfSupport,Integer level, int start, int rows);


    /**
     * 统计数量
     *
     * @param key                搜索关键字
     * @param type               分类
     * @param rp                 价格区间[0,100]
     * @param isSelfSupport    是否自营，1自营，2平台商铺商品
     * @return                   商品数量
     */
    int count(String key, Integer type, String rp,Integer isSelfSupport,Integer level);

    /**
     * 自动补全
     *
     * @param keyword     搜索关键字
     * @param facetfields 查询字段名，默认是 keyword
     * @return 结果集
     */
    Map<String, List<Map<String, Object>>> autoComplete(String keyword, String... facetfields) throws SolrServerException;

    /**
     * 文档新增
     * 策略：如果存在就先删除，再新增，如果不存在直接新增。是否存在的依据是定义的uniqueKey字段即sku.
     *
     * @param productInfo
     * @return 状态码
     */
    int addItem(SearchProductVo productInfo, int commitWithinMs) throws Exception;

    /**
     * 批量文档新增
     * 策略：如果存在就先删除，再新增，如果不存在直接新增。是否存在的依据是定义的uniqueKey字段即sku.
     *
     * @param productInfoList 商品集合
     * @return 状态码
     */
    int addItem(List<SearchProductVo> productInfoList, int commitWithinMs) throws Exception;


    /**
     * 重建商品索引
     *
     * @param productInfo 商品
     * @return
     * @throws Exception
     */
    int reIndexItem(SearchProductVo productInfo) throws Exception;
    
    /**
     * 删除商品索引
     * @param productInfo
     * @param commitWithinMs
     * @return
     * @throws Exception
     */
    int deleteById(SearchProductVo productInfo, int commitWithinMs) throws Exception;
}
